Instancje
Podstawową jednostką w grze są instancje różnych obiektów. W czasie działania gry możliwe jest zmienianie wielu aspektów tych instancji. Można też tworzyć nowe instancje i niszczyć instancje. Oprócz zmiennych związanych z ruchem, omawianych wcześniej i zmiennych związanych z wyświetlaniem, omawianych później, każda instancja posiada też następujące zmienne: *'object_index*' Indeks obiektu do którego należy instancja. Ta zmienna nie może być edytowana. *'id*' Unikalny identyfikator instancji (>= 100000). (Zauważ, że kiedy tworzysz jakąś planszę, wyświetlane jest id instancji wskazanej przez kursor.) *'mask_index' Indeks sprite'a używanego jako maski kolizji. Nadanie wartości -1 sprawi, że będzie taka jak sprite_index. *'solid' Określa czy instancja jest nieprzenikalna. Wartość ta może być zmieniana w czasie działania gry. *'persistent' Określa czy instancja jest trwała i będzie pozostawała po przejściu na inną planszę. Często wyłącza się persistent w pewnych momentach. (Na przykład w czasie powrotu na pierwszą planszę) Istnieje jeden problem związany z używaniem instancji. Nie łatwo jest rozpoznawać poszczególne instancje, bo nie posiadają nazw. Gdy istnieje tylko jedna instancja danego obiektu można używać jego nazwy, ale w przeciwnym wypadku trzeba użyć id instancji. Id to unikalny identyfikator każdej instancji. Możesz go używać w instrukcji with, albo też jako identyfikator obiektu. Na szczęście istnieją zmienne i funkcje pomocne w uzyskiwaniu id instancji. *'instance_count*' Zwraca liczbę instancji aktualnie znajdujących się na planszy. *'instance_id0..n-1*' Zwraca identyfikator określonej instancji. n oznacza numer instancji. Note that the assignment of the instances to the instance id's changes every step so you cannot use values from previous steps. Proszę też zauważyć, że instancje które są usuwane będą pozostawać na liście aż do końca stepa. Tak więc jeśli usuwasz instancje musisz sprawdzić czy dana instancja wciąż istnieje. Pozwól, że pokażę to na przykładzie. Przypuśćmy, że każda jednostka w twojej grze ma określoną moc, a ty chcesz zlokalizować najsilniejszą. Powinieneś użyć następującego kodu: { maxid = -1; maxpower = 0; for (i=0; i maxpower) {maxid = iii; maxpower = iii.power;} } } } Po wykonaniu pętli maxid będzie zawierać id jednostki o największej mocy. *'instance_find(obj,n)' Zwraca id (n+1)-wszej instancji typu obj. obj może być obiektem lub słowem kluczowym all. Jeśli instancja nie istnieje, zwracany jest specjalny obiekt noone. Note that the assignment of the instances to the instance id's changes every step so you cannot use values from previous steps. *'instance_exists(obj)' Zwraca czy instancja typu obj istnieje. obj może być obiektem, identyfikatorem instancji lub słowem kluczowym all. *'instance_number(obj)' Zwraca liczbę instancji typu obj. obj może być obiektem lub słowem kluczowym all. *'instance_position(x,y,obj)' Zwraca id instancji typu obj na pozycji (x,y). Kiedy wiele instancji znajduje się na tej pozycji zwracana jest pierwsza. obj może być obiektem lub słowem kluczowym all. Jeśli na danej pozycji nie znajduje się żadna instancja, zwracany jest specjalny obiekt noone. *'instance_nearest(x,y,obj)' Zwraca id instancji typu obj znajdującej sie najbliżej punktu (x,y). obj może być obiektem lub słowem kluczowym all. *'instance_furthest(x,y,obj)' Zwraca id instancji typu obj znajdującej sie najdalej od punktu (x,y). obj może być obiektem lub słowem kluczowym all. *'instance_place(x,y,obj)' Zwraca id instancji typu obj spotykanej gdy aktualna instancja zostanie umieszczona na pozycji (x,y). obj może być obiektem lub słowem kluczowym all. Jeśli żadna instancja nie jest spotykana, zwracany jest specjalny obiekt noone. Następujące funkcje mogą być użyte do tworzenia i niszczenia instancji: *'instance_create(x,y,obj)' Tworzy instancje typu obj na pozycji (x,y). Funkcja zwraca id nowej instancji. *'instance_copy(performevent)' Tworzy kopię aktualnej instancji. Argument wskazuje czy zdarzenie Create musi być wykonane dla kopii. Funkcja zwraca id nowej kopii. *'instance_destroy()' Niszczy aktualną instancję. *'instance_change(obj,perf)' Zmienia instancję w instancję typu obj. perf wskazuje czy należy wykonać zdarzenia Destroy i Create. *'position_destroy(x,y)' Niszczy wszystkie instancje których sprite zawiera pozycję (x,y). *'position_change(x,y,obj,perf)' Zmienia wszystkie instancje na pozycji (x,y) w instancje typu obj. perf wskazuje czy należy wykonać zdarzenia Destroy i Create.